package com.iwhalecloud.bss.kite.cucc.service.attr.linkhandler;

import java.math.BigDecimal;
import java.text.DecimalFormat;
import java.util.Map;
import java.util.Objects;

import org.springframework.stereotype.Service;

import com.iwhalecloud.bss.kite.common.util.KiteBeanUtils;
import com.iwhalecloud.bss.kite.common.util.KiteStringUtils;
import com.iwhalecloud.bss.kite.cucc.common.util.DecimalCalc;
import com.iwhalecloud.bss.kite.cucc.service.attr.handler.FinalPriceAttrHandler;
import com.iwhalecloud.bss.kite.cucc.service.attr.handler.StandardPriceAttrHandler;
import com.iwhalecloud.bss.kite.listener.handler.attr.annotation.AttrHandler;
import com.iwhalecloud.bss.kite.listener.handler.attr.annotation.AttrHandlers;
import com.iwhalecloud.bss.kite.listener.handler.attr.impl.AbstractAttrLinkageHandler;
import com.iwhalecloud.bss.kite.manager.inst.KiteAttr;
import com.iwhalecloud.bss.kite.manager.inst.KiteInst;
import com.iwhalecloud.bss.kite.service.attr.AttrData;
import com.iwhalecloud.bss.kite.service.scene.attr.OperateInstAttrService;
import com.ztesoft.bss.common.util.SpringUtil;

/**
* @Description: 折扣率=最终订购价格/标准价格*100%
*
* @author lyx
* @date 2020年11月26日
* @version V1.0
* @Package com.iwhalecloud.bss.kite.cucc.service.attr.linkhandler
*/
@Service
@AttrHandlers({
    @AttrHandler(StandardPriceAttrHandler.class), @AttrHandler(FinalPriceAttrHandler.class)
})
public class MemberDiscountRateAttrLinkHandler extends AbstractAttrLinkageHandler<AttrData> {

    @Override
    public void handle(KiteAttr attr, KiteInst inst, AttrData data) {
        Map<String, KiteAttr> attrMap = inst.getAttrMap();
        KiteAttr finalPrice = new KiteAttr();
        KiteAttr standardPrice = new KiteAttr();
        KiteAttr discountRate = new KiteAttr();
        attrMap.forEach((key, value) -> {
            if (KiteStringUtils.equals(value.getGroupId(), attr.getGroupId()) && value.getCname().contains("标准价格")) {
                KiteBeanUtils.copyProperties(value, standardPrice);
            }
            if (KiteStringUtils.equals(value.getGroupId(), attr.getGroupId()) && value.getCname().contains("最终订购价格")) {
                KiteBeanUtils.copyProperties(value, finalPrice);
            }
            if (KiteStringUtils.equals(value.getGroupId(), attr.getGroupId()) && value.getCname().contains("折扣率")) {
                KiteBeanUtils.copyProperties(value, discountRate);
            }
        });
        if (KiteStringUtils.isBlank(finalPrice.getValue()) || KiteStringUtils.isBlank(standardPrice.getValue())) {
            return;
        }
        if (Objects.nonNull(finalPrice) && Objects.nonNull(standardPrice)
            && KiteStringUtils.isNotBlank(finalPrice.getValue()) && KiteStringUtils.isNotBlank(standardPrice.getValue())) {
            SpringUtil.getBean(OperateInstAttrService.class).setAttrValue(inst, discountRate.getFieldName(), this.getDiscountRate(finalPrice.getValue(), standardPrice.getValue()), data.getSceneInstId(), null);
        }
    }

    @Override
    public void handleStyle(KiteAttr attr, KiteInst inst, AttrData data) {
        // TODO Auto-generated method stub
        
    }

    public String getDiscountRate(String finalPrice, String standardPrice) {
        BigDecimal finalPriceCalc = new BigDecimal(finalPrice);
        BigDecimal standardPriceCalc = new BigDecimal(standardPrice);
        double calAmout = finalPriceCalc.divide(standardPriceCalc, 4, BigDecimal.ROUND_HALF_UP).doubleValue();
        DecimalFormat df = new DecimalFormat();
        df.applyPattern("0.00");
        return KiteStringUtils.valueOf(df.format(calAmout * 100));
    }
}
